package com.lihepeng.leecode.frequency.LinkedList;

import org.junit.Test;

/**
 * 链表的奇偶重拍
 * 给定一个单链表，请设定一个函数，将链表的奇数位节点和偶数位节点分别放在一起，重排后输出。
 * 注意是节点的编号而非节点的数值。
 */
public class Solution14 {
    public ListNode oddEvenList (ListNode head) {
        if (head ==null) {
            return null;
        }
        // 奇数节点
        ListNode odd = head;
        // 偶数节点 可能为空
        ListNode even = head.next;
        ListNode evenNode = even;
        while (even != null &&  even.next !=null) {
            odd.next = even.next;
            odd = odd.next;
            even.next = odd.next;
            even = even.next;
        }
        odd.next = evenNode;
        return head;
    }

    @Test
    public void runTest() {
        ListNode listnode1 = new ListNode(1);
        ListNode listnode2 = new ListNode(2);
        ListNode listnode3 = new ListNode(3);
        ListNode listnode4 = new ListNode(4);
        ListNode listnode5 = new ListNode(5);
        ListNode listnode6 = new ListNode(6);
        listnode1.next = listnode2;
        listnode2.next = listnode3;
        listnode3.next = listnode4;
        listnode4.next = listnode5;
        listnode5.next = listnode6;
        ListNode listNode = oddEvenList(listnode1);
        while (listNode!=null) {
            System.out.print(listNode.val+"---->");
            listNode = listNode.next;
        }
    }
}
